package com.flying.map;

import org.junit.Test;

import java.util.*;

/**
 * @author liupengfei
 * @ClassName: MapTest
 * @Time: 2023-09-19 18:15
 * @Version: 1.0
 * @Descition
 */
public class MapTest {

    /*
     * 测试 Map 中的实现类
     */
    @Test
    public void test1() {
        HashMap map = new HashMap();
        map.put(12, "AA");
        map.put("AA", 1233);
        map.put("CC", 33);
        map.put(55, "BB");

        System.out.println(map);
    }


    @Test
    public void test2() {
        Map map = new Hashtable();

        // map.put(null,123);
//        map.put("AA",null);
        System.out.println(map);
    }


    @Test
    public void test3() {
        Map map = new LinkedHashMap();

        map.put(12, "AA");
        map.put("AA", 1233);
        map.put("CC", 33);
        map.put(55, "BB");
        map.put("时间", new Date());

        System.out.println(map);


    }

    /*
    *    测试 Map 中的常用方法
    *   增 （没有添加，有覆盖（修改））
            put(Object key,Object value)
            putAll(Map m)
         删
            Object remove(Object key)
         改
            put(Object key,Object value)
            putAll(Map m)
         查
            Object get(Object key)
         长度
            int size()
         遍历
            遍历key集： Set keySet()
            遍历value集 Collection values()
            遍历entry： Set entrySet()
    */


    @Test
    public void test4() {
        HashMap map = new HashMap();

        // 添加: put(Object key,Object value)
        map.put("AA", 56);
        map.put(67, "Tom");
        map.put("BB", 78);
        map.put(new Person("jerry", 45), 56);

        System.out.println(map);
        System.out.println(map.size());

        // 删除：Object remove(Object key)
        Object value = map.remove("AA");
        System.out.println(value);  // 56
        System.out.println(map);


        // 修改： put(Object key,Object value)
        Object oldValue = map.put("BB", 99);
        System.out.println(oldValue);
        System.out.println(map);

        //  Object get(Object key)
        Object value1 = map.get(67);
        System.out.println(value1);


    }

    // Map 遍历操作
    //    遍历
    //    遍历key集： Set keySet()
    //    遍历value集 Collection values()
    //    遍历entry： Set entrySet()


    @Test
    public void test5() {
        HashMap map = new HashMap();

        map.put("AA", 56);
        map.put(67, "Tom");
        map.put("BB", 78);
        map.put(new Person("jerry", 45), 100);

        // 遍历 key集 :  Set keySet()
        Set keySet = map.keySet();
        System.out.println(keySet);

        //  使用迭代器
        Iterator iterator = keySet.iterator();
        while (iterator.hasNext()) {
            Object key = iterator.next();
            System.out.println(key);
        }

        //  遍历 value集： Collection values()
        // 方式一: 推荐
        Collection values = map.values();

        //  增强for
        for (Object value : values) {
            System.out.println(value);
        }

/*        //  方式二
        Set keySet1 = map.keySet();
        for (Object key : keySet1) {
            Object value = map.get(key);
            System.out.println(value);
        }*/

    }


    @Test
    public void test6() {
        HashMap map = new HashMap();

        map.put("AA", 56);
        map.put(67, "Tom");
        map.put("BB", 78);
        map.put(new Person("jerry", 45), 100);


        // 遍历entry： Set entrySet()
        //  方式一：
//        Set entrySet = map.entrySet();
//        for (Object entry : entrySet) {
//            Map.Entry entry1 = (Map.Entry) entry;
//            System.out.println(entry1.getKey() + "----->" + entry1.getValue());
//        }

        // 方式二：
        Set keySet = map.keySet();
        Iterator iterator = keySet.iterator();
        while (iterator.hasNext()) {
            Object key = iterator.next();
            System.out.println(key+"---> "+map.get(key));
        }
    }
}
